package com.fhx.modules.swagger;

import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

/**
 * swagger的配置启动类
 * @author fhx
 * @version V1.0
 * @Date 2021-04-28 20:10
 */
@Configuration              //说明这是一个配置类
@EnableSwagger2             //该注解开启Swagger2的自动配置
@EnableSwaggerBootstrapUI
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")         //是否开启swagger，正式环境一般是需要关闭的（避免不必要的漏洞暴露！），可根据springboot的多环境配置进行设置
public class swagger2 {

    /**
     * swagger2的配置文件，这里可以配置swagger2的一些基本的内容，比如扫描的包等等
     * @return
     */
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(aipInfo())     //关于文档的各种信息
                .enable(true)           //配置是否启用Swagger，如果是false，在浏览器将无法访问，默认是true
                .groupName("中国银行组")
                .select()               //选择扫描的接口
                //apis： 添加过滤条件
                .apis(RequestHandlerSelectors.basePackage("com.fhx.modules.boc.controller"))//指定扫描的接口
                .build();
    }

    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(aipInfo())     //关于文档的各种信息
                .enable(true)           //配置是否启用Swagger，如果是false，在浏览器将无法访问，默认是true
                .groupName("中国建设银行组")
                .select()               //选择扫描的接口
                //apis： 添加过滤条件
                .apis(RequestHandlerSelectors.basePackage("com.fhx.modules.ccb.controller"))//指定扫描的接口
                .build();
    }

    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(aipInfo())     //关于文档的各种信息
                .enable(true)           //配置是否启用Swagger，如果是false，在浏览器将无法访问，默认是true
                .groupName("中国工商银行组")
                .select()               //选择扫描的接口
                //apis： 添加过滤条件
                .apis(RequestHandlerSelectors.basePackage("com.fhx.modules.icbc.controller"))//指定扫描的接口
                .build();
    }

    /**
     * 构建 api文档的详细信息函数,注意这里的注解引用的是哪个
     * @return
     */
    private ApiInfo aipInfo() {
        Contact contact = new Contact("haixing","https://www.baidu.com/","fuhaixing@chinasofti.com");
        return new ApiInfo(
                "Spring Boot 测试使用 Swagger2 构建RESTful API", // 标题
                "API描述", // 描述
                "版本内容：v1.0", // 版本
                "链接：https://www.baidu.com/", // 组织链接
                contact, // 联系人信息
                "许可：Apach 2.0 ", // 许可
                "许可链接：XXX", // 许可连接
                new ArrayList<>()// 扩展
        );
    }

}
